liblfds release 4 release note

Release date : 7th December 2009

What's New?

  1. Added support for Linux on ARM. Requires ARMv6k or better.
  2. Fixed a profound, pervasive bug where pointer declerations incorrectly specified volatility. x86/x64 appear unaffected, but on other platforms, only debug builds have been reliable; release builds were subtly or not-so-subtly broken, depending on platform. On some platforms (Linux on ARM) some test failed consistently. On others (Linux on x86) test failures were so rare the tests seemed fine.
  3. Changed all state and element state pointer types from void pointer to a struct pointer, e.g. void *stack_state to struct stack_state *ss. The various structures are declared as incomplete types in abstraction.h, so you can use them but you can't touch the members.
  4. Added FREELIST_QUERY_VALIDATE to freelist_query. This validates a freelist, by checking the expected number of elements are present and there are no loops. This is for the test program.
  5. Added QUEUE_QUERY_VALIDATE to queue_query. This validates a queue, by checking the expected number of elements are present and there are no loops. This is for the test program.
  6. Fixed a bug in queue_delete. When we came to delete the queue, we would fully dequeue (which pushes all elements back onto the freelist) then delete the freelist and delete the state. However, there is in the algorithm a dummy element and fully dequeuing does not remove it from the queue. As such, that element was manually pushed back onto the freelist. The bug was that the queue_element was being pushed back, rather than the freelist_element which held the queue_element. This bug also existed in the ringbuffer's queue and likewise has been fixed there.
  7. Added tests for the liblfds abstraction layer.
  8. Converted the freelist and queue tests into pass/fail tests; the tests have been fully rewritten and are much better.
  9. Added a benchmark functionality to the test program. Only one benchmark to begin with, for the queue. Emits CSV data to stdout.

Known Issues

SList may be broken; on linux on x86, prior to the pointer fix, it asserted on a NULL pointer in about 10% of tests. Going to investigate this now and see if it still occurs.